#include <sys_head.h>

int x = 0;

int main(int argc, char const *argv[])
{
    int fd[2];
    if (-1 == pipe(fd))
    {
        printf("创建无名管道失败\n");
    }
    else
    {
        printf("fd[0] = %d fd[1] = %d\n", fd[0], fd[1]);
    }
    int pid = fork();
    while (1)
    {
        if (pid == 0)
        {
            char buf[128];
            //如果此时管道里面没有内容，程序会阻塞等待
            read(fd[0],buf,sizeof(buf));
            x = atoi(buf);//将字符串转换为整形
            x++;
            printf("子进程读取的内容为:%d\n",x);
            sprintf(buf,"%d",x);//将整形转换为字符串
            write(fd[1],buf,sizeof(buf));
            sleep(1);//休息一秒钟，让子进程读走内容，如果不休息，子进程将读不到内容
        }
        else if (pid > 0)
        {
            char buf[128];
            sprintf(buf,"%d",x);//将整形转换为字符串
            write(fd[1],buf,sizeof(buf));
            sleep(1);//休息一秒钟，让子进程读走内容，如果不休息，子进程将读不到内容
            read(fd[0],buf,sizeof(buf));
            x = atoi(buf);//将字符串转换为整形
            x++;
            printf("主进程读取的内容是:%d\n",x);
        }
        sleep(1);
    }

    return 0;
}
